<?php
////////////////////////////////////////////////////////////////////////////////////////////////////
// CLASE filtros
////////////////////////////////////////////////////////////////////////////////////////////////////

class FiltroComponent extends Object {

var $components = array("Formato");
var $controller;
/**
* Constructor.
*
*/
    function __construct() {

		//vendor('pragmatia'.DS.'clase.leerEscribirArchivoPalm');
		//$this->pdb = new PDB();
    }

/** 
 * Startup 
 * 
 * @param object A reference to the controller 
 * @return null 
 */ 
    function startup(&$controller) { 
		$this->controller = $controller;
	}


/**
* Extrae los ids de las checks que posteo y me devuelve solo las seleccionadas
* @return array
* @param  array  $checks	Array de checks que vienen desde el formulario
*/
    function extraerIdsSeleccionados($checks = array()) {
        $return = false;
        foreach($checks as $k=>$valor) {
			if(substr($k,0,3) == "id_") {
				if($valor == 1) {
					$return[] = array_pop(explode("_", $k));
				}
			}
        }
        return $return;
    }

	function generarCondicion($condiciones)
	{
		$condicion = array();

		if (!empty($condiciones) && is_array($condiciones)) {
			foreach($condiciones as $k=>$v)
			{
				if (empty($v) && $v != "0")
					continue;
				$tmp = explode("-", $k);
				if (count($tmp) <> 2)
				{
					continue;
				}
				$model = $tmp[0];
				$campo = $tmp[1];

				if(substr($campo, strlen($campo) - 7) == "__desde") //rango de fechas desde
				{
					//$k = $model . "." . substr($campo, 0, strlen($campo) - 7);
					$k = $model . "." . $campo;
					if(!empty($v)) {
						if(strpos($v, "/"))
							$condicion[$k] = ">=" . $this->Formato->formatearFechaHora($v);
						else
							$condicion[$k] = ">=" . $v;
					}
				}
				elseif (substr($campo, strlen($campo) - 7) == "__hasta") //rango de fechas hasta
				{
					//$k = $model . "." . substr($campo, 0, strlen($campo) - 7);
					$k = $model . "." . $campo;
					if(!empty($v)) {
						if(strpos($v, "/"))
							$condicion[$k] = "<=" . $this->Formato->formatearFechaHora($v);
						else
							$condicion[$k] = "<=" . $v;
					}
				}
				else
				{
					if (isset($this->controller->{$model}) && is_object($this->controller->{$model})) //si existe el model...
					{
						$campos = $this->controller->{$model}->_tableInfo->value;
					}
					elseif (isset($this->controller->{$this->controller->modelClass}) && is_object($this->controller->{$this->controller->modelClass}->{$model})) //si existe el model como una relacion...
					{
						$campos = $this->controller->{$this->controller->modelClass}->{$model}->_tableInfo->value;
					}

					if(is_array($campos))
					{
						foreach($campos as $k1=>$v1)
						{
							//d($this->controller->{$model}->getColumnType($v1['name']));
							$k = $model . "." . $campo;
							if($v1['name'] == $campo && ($v1['type'] == "string" || $v1['type'] == "text") && !is_array($v))
							{
								$condicion[$k] = "like " . $v . "_expandir_";
							}
							elseif(($v1['name'] == $campo && $v1['type'] == "integer") || is_array($v))
							{
								$condicion[$k] = $v;
							}
						}
					}
				}
			}
		}
		elseif(empty($condicion) && isset($condiciones['accion']) && $condiciones['accion'] == "limpiar")
			return $condicion;

		$return = "";
		//d($condicion);
		foreach($condicion as $k=>$v)
		{
			$v = str_replace(":", "$$**$$", $v);
			if(substr($k, strlen($k) - 7) == "__desde" || substr($k, strlen($k) - 7) == "__hasta") {
				$k = substr($k, 0, strlen($k) - 7);
			}
			if(is_array($v)) {
				$return .= $k . "|" . implode("**--**", $v);
			}
			else {
				$return .= $k . "|" . $v;
			}
			$return .= "*|*";
		}
		//d($return);
		return $return;
	}

	function generarData($condiciones)
	{
		if(!empty($condiciones))
		{
			
			if(substr($condiciones, -3, 3) <> "*|*")
				$condiciones .= "*|*";
			
			$tmp = explode("*|*", $condiciones);
			array_pop($tmp);
			
			$condiciones = false;
			foreach($tmp as $k=>$v)
			{
				$tmp1 = explode("|", $v);
				if(isset($tmp1[0]) && isset($tmp1[1]) && !empty($tmp1[0]) && !empty($tmp1[1])) 
					$tmp1[0] = str_replace(".", "-", $tmp1[0]);
					if(substr($tmp1[1], 0, 2) == ">=")
					{
						$return[$tmp1[0] . "__desde"] = $this->Formato->formatearFechaHora($this->__reemplazos($tmp1[1]));
					}
					elseif(substr($tmp1[1], 0, 2) == "<=")
					{
						$return[$tmp1[0] . "__hasta"] = $this->Formato->formatearFechaHora($this->__reemplazos($tmp1[1]));
					}
					else
					{
						$return[$tmp1[0]] = $this->__reemplazos($tmp1[1]);
					}
					
			}
		}
		$x = array("Filtro"=>$return);
		//d($x);
		return $x;
	}

	function __reemplazos($valor)
	{
		$valor = str_replace("like","",$valor);
		$valor = str_replace("_expandir_","",$valor);
		$valor = str_replace(">=","",$valor);
		$valor = str_replace("<=","",$valor);
		$valor = str_replace("$$**$$",":",$valor);
		return trim($valor);
	}
}

?>